package model

import (
	"time"

	"gorm.io/gorm"
)

// Role 角色模型
type Role struct {
	ID        uint           `gorm:"primarykey" json:"id"`
	CreatedAt time.Time      `json:"created_at"`
	UpdatedAt time.Time      `json:"updated_at"`
	DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
	Name      string         `gorm:"size:50;not null;comment:角色名称" json:"name" binding:"required"`
	Code      string         `gorm:"size:50;not null;unique;comment:角色编码" json:"code" binding:"required"`
	Sort      int            `gorm:"default:0;comment:排序" json:"sort"`
	Status    int            `gorm:"default:1;comment:状态(1:启用,2:禁用)" json:"status"`
	Remark    string         `gorm:"size:255;comment:备注" json:"remark"`
	// 关联
	Users []User `gorm:"many2many:go_user_role;" json:"users,omitempty"`
	Menus []Menu `gorm:"many2many:go_role_menu;" json:"menus,omitempty"`
}

// TableName 设置表名
func (Role) TableName() string {
	return "go_role"
}

// RoleSearchParams 角色搜索参数
type RoleSearchParams struct {
	Name   string `form:"name" json:"name"`
	Code   string `form:"code" json:"code"`
	Status int    `form:"status" json:"status"`
}

// CreateRoleRequest 创建角色请求
type CreateRoleRequest struct {
	Name    string `json:"name" binding:"required,max=50"`
	Code    string `json:"code" binding:"required,max=50"`
	Sort    int    `json:"sort"`
	Status  int    `json:"status" binding:"oneof=1 2"`
	Remark  string `json:"remark"`
	MenuIDs []uint `json:"menu_ids"`
}

// UpdateRoleRequest 更新角色请求
type UpdateRoleRequest struct {
	Name    string `json:"name" binding:"omitempty,max=50"`
	Code    string `json:"code" binding:"omitempty,max=50"`
	Sort    int    `json:"sort"`
	Status  int    `json:"status" binding:"omitempty,oneof=1 2"`
	Remark  string `json:"remark"`
	MenuIDs []uint `json:"menu_ids"`
}
